/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package ms.jasim.model.event;

import ms.jasim.framework.IJasimAppContext;
import ms.jasim.framework.SolutionSimulator.SimulatorArg;
import ms.jasim.model.JasimModel;
import ms.jasim.model.ModelPackage;
import ms.jasim.model.NamedModelObject;
import ms.jasim.model.items.ItemList;
import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Event</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link ms.jasim.model.event.Event#getPrecondition <em>Precondition</em>}</li>
 *   <li>{@link ms.jasim.model.event.Event#getParameters <em>Parameters</em>}</li>
 *   <li>{@link ms.jasim.model.event.Event#getPostcondition <em>Postcondition</em>}</li>
 *   <li>{@link ms.jasim.model.event.Event#isEnabled <em>Enabled</em>}</li>
 *   <li>{@link ms.jasim.model.event.Event#isHappenOnce <em>Happen Once</em>}</li>
 *   <li>{@link ms.jasim.model.event.Event#getLabel <em>Label</em>}</li>
 * </ul>
 * </p>
 *
 * @see ms.jasim.model.event.EventPackage#getEvent()
 * @model
 * @generated
 */
public interface Event extends NamedModelObject {
	/**
	 * Returns the value of the '<em><b>Precondition</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Precondition</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Precondition</em>' containment reference.
	 * @see #setPrecondition(EventPrecondition)
	 * @see ms.jasim.model.event.EventPackage#getEvent_Precondition()
	 * @model containment="true"
	 * @generated
	 */
	EventPrecondition getPrecondition();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#getPrecondition <em>Precondition</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Precondition</em>' containment reference.
	 * @see #getPrecondition()
	 * @generated
	 */
	void setPrecondition(EventPrecondition value);

	/**
	 * Returns the value of the '<em><b>Parameters</b></em>' containment reference list.
	 * The list contents are of type {@link ms.jasim.model.event.EventParameter}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Parameters</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Parameters</em>' containment reference list.
	 * @see ms.jasim.model.ModelPackage#getEvent_Parameters()
	 * @model containment="true"
	 */
	ItemList getParameters();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#getParameters <em>Parameters</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Parameters</em>' containment reference.
	 * @see #getParameters()
	 * @generated
	 */
	void setParameters(ItemList value);

	/**
	 * Returns the value of the '<em><b>Postcondition</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Postcondition</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Postcondition</em>' containment reference.
	 * @see #setPostcondition(ReactionList)
	 * @see ms.jasim.model.event.EventPackage#getEvent_Postcondition()
	 * @model containment="true"
	 * @generated
	 */
	ReactionList getPostcondition();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#getPostcondition <em>Postcondition</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Postcondition</em>' containment reference.
	 * @see #getPostcondition()
	 * @generated
	 */
	void setPostcondition(ReactionList value);

	/**
	 * Returns the value of the '<em><b>Enabled</b></em>' attribute.
	 * The default value is <code>"true"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Enabled</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Enabled</em>' attribute.
	 * @see #setEnabled(boolean)
	 * @see ms.jasim.model.event.EventPackage#getEvent_Enabled()
	 * @model default="true"
	 * @generated
	 */
	boolean isEnabled();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#isEnabled <em>Enabled</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Enabled</em>' attribute.
	 * @see #isEnabled()
	 * @generated
	 */
	void setEnabled(boolean value);

	/**
	 * Returns the value of the '<em><b>Happen Once</b></em>' attribute.
	 * The default value is <code>"true"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Happen Once</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Happen Once</em>' attribute.
	 * @see #setHappenOnce(boolean)
	 * @see ms.jasim.model.event.EventPackage#getEvent_HappenOnce()
	 * @model default="true"
	 * @generated
	 */
	boolean isHappenOnce();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#isHappenOnce <em>Happen Once</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Happen Once</em>' attribute.
	 * @see #isHappenOnce()
	 * @generated
	 */
	void setHappenOnce(boolean value);

	/**
	 * Returns the value of the '<em><b>Label</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Label</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Label</em>' attribute.
	 * @see #setLabel(String)
	 * @see ms.jasim.model.event.EventPackage#getEvent_Label()
	 * @model
	 * @generated
	 */
	String getLabel();

	/**
	 * Sets the value of the '{@link ms.jasim.model.event.Event#getLabel <em>Label</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Label</em>' attribute.
	 * @see #getLabel()
	 * @generated
	 */
	void setLabel(String value);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model contextDataType="ms.jasim.model.JasimAppContext"
	 * @generated
	 */
	boolean react(IJasimAppContext context, JasimModel model);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model contextDataType="ms.jasim.model.JasimAppContext" paramNameOrdered="false"
	 * @generated
	 */
	Object getParameterValue(IJasimAppContext context, String paramName);

	boolean canTriggerNow(IJasimAppContext context, SimulatorArg arg);

} // Event
